home *** CD-ROM | disk | FTP | other *** search
- # DIVIDE_START=update.doc
- -------------------------- lm001a --------------------------
- 1993.8.1
- Version 0.01a 作成開始。
- ・仕様
- (1) 起動方法
- lm ディレクトリ名
- lm . カレント・ディレクトリの場合
-
- (2) 注意
- LHA.EXE をパスの通った所に置いておくこと
-
- (3) 処理内容
- 1 ディレクトリを探索してCATLOGで整理済のファイルを探す。
- 2 見つかったら、そのファイルの拡張子を削除してファイル名だけを取り出す。
- 3 そのファイル名を書庫名として LHA を起動する。
- 4 CATLOGで整理済のファイルが見つからなくなるまで繰り返す。
-
- # DIVIDE_END
-
- /* DIVIDE_START=main.c */
- /*
- lm main.c
-
- 作 : 山先(NIFTY-ID:GHH01217)
- */
- #define MAIN 1
- #include "lm.h"
-
- static void useage()
- {
- printf(
- "CATLOGで整理したファイルを圧縮するプログラム\n\t%s\tVersion=%s"
- " by .. GHH01217 山先\n"
- , str
- , VERSION
- );
- printf(
- "\n 使い方:lm ディレクトリ名"
- "\n lm . ……………… カレント・ディレクトリの場合"
- );
- }
-
- /******************************************
- #if VERIFY == YES
- if ( verify == TRUE ) {
- printf( "同じ発言日時、発言番号のものは削除する" );
- };
- #endif
- *********************************************/
-
- const char *last_comma( const char *str )
- {
- const char *result;
-
- result = str;
- while ( *str ) { if ( *str == '.' ) result = str;
- str++;
- }; return( result );
- }
-
- const char *last_yen( const char *str )
- {
- const char *result;
-
- result = str;
- while ( *str ) { if ( *str == '\\' ) result = str;
- str++;
- }; return( result );
- }
-
- void append_yen( char *str )
- {
- char c;
-
- while ( *str ) str++;
- c = *( str -1 );
- if ( c != '\\' && c != ':' ) {
- *str++ = '\\';
- *str = '\0';
- };
- }
-
- static void (*lm_findfirst_sub)( const char *file , const char *ff_name );
-
- static void lm_findfirst_loop( const char *path )
- {
- int done;
- struct ffblk ffblk;
- char f_name[ 256 ];
-
- strcpy( f_name , path ); strcat( f_name , "*.*" ); /* 全ファイルを検索 */
- done = findfirst( f_name , &ffblk , FA_DIREC ); /* Directory を指定 */
- while ( ! done ) {
- strcpy( f_name , path ); strcat( f_name , ffblk.ff_name );
- if ( ffblk.ff_attrib == FA_DIREC ) {
- if ( strcmp( ffblk.ff_name , "." ) != 0
- && strcmp( ffblk.ff_name , ".." ) != 0
- ) { /* Sub dir 再帰呼出し */
- strcat( f_name , "\\" ); lm_findfirst_loop( f_name );
- };
- } else {
- /* ファイル名 */
- (*lm_findfirst_sub)( f_name , ffblk.ff_name );
- };
- done = findnext( &ffblk );
- };
- }
-
- void lm_findfirst(
- const char *path,
- void (*sub)( const char *file , const char *ff_name )
- ) {
- lm_findfirst_sub = sub;
- lm_findfirst_loop( path );
- }
-
- int matchstr( char *form , char *trg )
- {
- while ( *form ) {
- switch( *form ) {
- case '%': if ( ! isdigit( *trg ) ) return( FALSE );
- break;
- case '$': if ( ! isalpha( *trg ) ) return( FALSE );
- case '?': break;
- default: if ( *form != *trg ) return( FALSE );
- };
- form++; trg++;
- };
- return( TRUE );
- }
-
- int isIDname( char *str )
- {
- if ( matchstr( "$$$%%%%%" , str ) == TRUE ) return( YES );
- return( NO );
- }
-
- static int isCATLOGFile( const char *f_name )
- {
- int num;
- char *p1 , *p2;
- FILE *fpi;
-
- if ( ( fpi=fopen( f_name , "r" ) ) == NULL ) { /* 起こり得ないエラー */
- printf( str, "can't open→<%s> (read)\n", f_name );
- exit( 1 );
- };
- fgets( str , LINE , fpi );
-
- num = 0;
- if ( strncmp( str , "FORUM:" , 6 ) == 0 ) {
- p1 = str + 6; p2 = str;
- while ( isalnum( *p1 ) ) *p2++ = *p1++; *p2 = '\0';
- while ( *p1 == ' ' ) p1++;
- if ( strncmp( p1 , "MES:" , 4 ) == 0 ) {
- p1 += 4; /* skip 'MES:' */
- num = atoi( p1 );
- };
- } else if ( strncmp( str , "MAIL:" , 5 ) == 0 ) {
- p1 = str + 5; p2 = str;
- while ( isalnum( *p1 ) ) *p2++ = *p1++; *p2 = '\0';
- if ( isIDname( str ) == YES ) {
- num = MAIL;
- };
- } else if ( strncmp( str , "HP:" , 3 ) == 0 ) {
- p1 = str + 3; p2 = str;
- while ( isalnum( *p1 ) ) *p2++ = *p1++; *p2 = '\0';
- if ( isIDname( str ) == YES ) {
- num = HP;
- };
- } else if ( strncmp( str , "PATIO:" , 6 ) == 0 ) {
- p1 = str + 6; p2 = str;
- while ( isalnum( *p1 ) ) *p2++ = *p1++; *p2 = '\0';
- if ( isIDname( str ) == YES ) {
- num = PATIO;
- };
- } else if ( strncmp( str , "BILL:BILL" , 9 ) == 0 ) {
- num = BILL;
- } else if ( strncmp( str , "COLLECT_ID:" , 11 ) == 0 ) {
- p1 = str + 11; p2 = str;
- while ( isalnum( *p1 ) ) *p2++ = *p1++; *p2 = '\0';
- if ( isIDname( str ) == YES ) {
- num = COLLECT_ID;
- };
- } else if ( strncmp( str , "ALL-MAIL" , 8 ) == 0 ) {
- num= ALL_MAIL;
- } else if ( strncmp( str , "CLIP" , 4 ) == 0 ) {
- num = CLIP;
- };
- fclose( fpi );
- return( num );
- }
-
- static void main_loop( const char *f_name , const char *ff_name )
- {
- char *p1, *p2;
-
- if ( isCATLOGFile( f_name ) == 0 ) return;
-
- strcpy( file_name, f_name );
-
- p1 = (char *)last_yen( file_name );
- p2 = (char *)last_comma( p1 ); if ( p1 != p2 ) *p2 = '\0';
-
- sprintf( str, "lha u %s %s", file_name, f_name );
- printf( "%s\n", str );
-
- if ( spawnlp( P_WAIT, "lha", "lha", "u", file_name, f_name, NULL ) != 0 ) {
- printf( "処理の途中ですが、終了します(lm)\n" );
- exit( 1 );
- };
- }
-
- void main( int argc , char *argv[] )
- {
- char path[ MAX_FILENAME_LEN ];
-
- strcpy( str, argv[0] );
-
- if ( --argc <= 0 ) { useage(); exit( 1 ); };
- ++argv;
- strcpy( path, *argv );
- append_yen( path );
-
- lm_findfirst( path, main_loop );
-
- exit( 0 ); /* 終了 */
- }
- /* DIVIDE_END */
-
- /* DIVIDE_START=lm.h */
- /*
- 作 : 山先(NIFTY-ID:GHH01217)
- */
-
- #include <mylib.h>
- #include <stdlib.h>
- #include <ctype.h>
- #include <jctype.h>
- #include <string.h>
- #include <process.h>
- #include <dos.h>
- #include <dir.h>
- #include "extern.h"
-
- #define LINE (1024*2)
- #define MAX_FILENAME_LEN 64
-
- /* CATLOG の会議室番号の定義 */
- #define HP -1 /* Home Party である */
- #define MAIL -2 /* 電子メールである */
- #define BILL -3 /* 利用料金情報である */
- #define COLLECT_ID -4 /* ID収集ファイルである */
- #define LIB -5 /* LIB の一覧である */
- #define COLLECT_LIB -6 /* IDによる LIB の収集ファイルである */
- #define ALL_MAIL -7 /* 1つにまとめた MAIL ファイルである */
- #define PATIO -8 /* PATIO である */
- #define CLIP -9 /* クリッピングサービスである */
- #define MES 20 /* フォーラムの会議室である */
-
- #ifdef MAIN
- #if VERIFY == YES
- int verify = FALSE;
- #endif
- char file_name[ MAX_FILENAME_LEN ];
- char str[ LINE ];
-
- #else
- #if VERIFY == YES
- extern int verify ;
- #endif
- extern char file_name[ MAX_FILENAME_LEN ];
- extern char str[ LINE ];
- #endif
- /* DIVIDE_END */
-
- # DIVIDE_START=makefile
-
- VERSION00 = 0
- VERSION01 = 01
- VERSION02 = a # 元のバージョン
- VERSION03 = b # 現在のバージョン
- VERSION04 = $(VERSION00)$(VERSION01)$(VERSION02) # 元の書庫ファイル
-
- VERSION1 = $(VERSION00)
- VERSION2 = $(VERSION01)$(VERSION03)
- VERSION3 = $(VERSION00)$(VERSION01)$(VERSION02)$(VERSION03)
- VERSION = $(VERSION1)$(VERSION2)
- MemoryModel = s
- tc = tcc
- lib = tlib
- link = tlink
- cflags = -m$(MemoryModel) -A -d -N -O -DVERSION="$(VERSION1).$(VERSION2)" -DVERIFY=YES
-
- .c.obj :
- $(tc) -c $(cflags) -Ie:\tc\include $*
-
- .c.com :
- $(tc) $(cflags) -Ie:\tc\include $*
- $(link) /c \tc\lib\c0t.obj $*.obj , $* , nul , @listlibs
-
- com_prg = lm.exe
-
- hdr1 = lm.h \tc\include\mylib.h
- obj1 = main.obj
-
- $(com_prg) : $(obj1) makefile $(hdr1) all listlibs
- tlink /c \tc\lib\c0$(MemoryModel).obj $(obj1) , $* , nul , @listlibs
- copy $(com_prg) d:\exe
- lha u $*$(VERSION) *.exe all
- lha u $*$(VERSION)0 *.exe *.ggg readme.doc
- # 差分ファイルを作り、削除する
- # cd old
- # del *.exe
- # lha e ..\$*$(VERSION04) *.exe # 元のファイルの解凍
- # cd ..
- # bdiff old\$*.exe $*.exe $*$(VERSION3).bdf
- # lha u $*$(VERSION3) $*$(VERSION3).bdf
- # del $:$(VERSION3).bdf
- # del $*$(VERSION3).i*
- # ish $*$(VERSION3).lzh /ss /mv 100
-
- $(obj1) : $(hdr1) makefile
- # DIVIDE_END
-
- # -DIVIDE_START=listlibs
- e:\tc\lib\emu e:\tc\lib\maths e:\tc\lib\cs
- # DIVIDE_END
-
- REM DIVIDE_START=m.bat
- echo off
- :loop
- if "%1"=="" goto main
- vz %1
- :loop2
- make
- if errorlevel 1 goto error
- goto end
- :main
- vz all
- div all
- goto loop2
- :error
- pause
- goto loop
- :end
- REM DIVIDE_END
-
- REM DIVIDE_START=u.bat
- div -u:update.doc all
- if errorlevel 1 goto end
- div -a:*.c all
- div -a:*.h all
- div -a:makefile all
- div -a:listlibs all
- div -a:*.bat all
- div -a:readme.doc all
- div -a:*.ggg all
- :end
- REM DIVIDE_END
-
- /* DIVIDE_START=readme.doc */
- ------------
- lmの使い方
- ------------
-
- 1.lmがすること。
- 本プログラムは、指定のディレクトリ、及び、その下のディレクトリを
- 自動検索してCATLOGで整理してできたファイルを検索し、見つけた
- ファイルをLHAを起動して、同名の書庫ファイルに圧縮保存するもので
- す。
-
- 2.CTの実行の仕方
- コマンドライン上で、次のように実行して下さい。
- lm ディレクトリ名
- lm . カレント・ディレクトリの場合
-
- ★ 注意
- LHA.EXE が必要です。
- LHA.EXE をパスの通った所に置いて下さい。そうでないと異常終了します。
-
- ☆ 処理内容
- 1 ディレクトリを探索してCATLOGで整理済のファイルを探す。
- CATLOGが作ったファイルかどうかは、そのファイルの1行目を読み込
- んで判断しています。
- 2 見つかったら、そのファイルの拡張子を削除してファイル名だけを取り出す。
- 3 そのファイル名を書庫名として LHA を起動する。
- 4 CATLOGで整理済のファイルが見つからなくなるまで 1 ~ 3 を繰り返す。
-
- 3.著作権
- 本プログラムは NIFTY ID:GHH01217 山先(やません)に著作権があるものと
- します。しかし、その使用、配付は自由に行っていただいてかまいません。
-
- 4.何かありましたら。
- 私あてメールを下さい。
-
- GHH01217 山先
- /* DIVIDE_END */
-
- /* DIVIDE_START=lm.ggg */
- ======================================================================
- 【ソフト 名】 lm.exe CATLOG整理済ファイル圧縮プログラム Version 0.01a
- 【登 録 名】 lm001a.lzh (LHAで解凍して下さい)
- 【検索 キー】 1:LM 2:MOPTERM 3:FAPX 4:CATLOG
- 【著作権 者】 山先 GHH01217
- 【開発 環境】 Turbo-C Ver2.0 → lm.exe
- 【対応 機種】 MS-DOS 汎用
- 【動作 確認】 FM-TOWNS20F + 8M-RAM コンソール上
- 【公 開 日】 93/08/01
- 【ソフトウェア種別】 通信関連。フリー・ソフトウェア。
- 【使用 条件】 バグを発見した場合は、メール等で報告すること。
- ======================================================================
- 【ソフト紹介】
- CATLOGが作るファイルを自動検索してLHAを起動するものです。
- 別途、LHAを入手して下さい。また、LHAはパスの通った所に置いて
- 下さい。
- 詳しくはREAD.DOCをお読み下さい。
-
- ダウンロードファイル名を lm001a.lzh として下さい。
- GHH01217 山先
- /* DIVIDE_END */
-